home *** CD-ROM | disk | FTP | other *** search
- /* -*- C -*-
- ** Astrolog (Version 4.40) File: placalc2.c
- **
- ** IMPORTANT NOTICE: The graphics database and chart display routines
- ** used in this program are Copyright (C) 1991-1995 by Walter D. Pullen
- ** (astara@u.washington.edu). Permission is granted to freely use and
- ** distribute these routines provided one doesn't sell, restrict, or
- ** profit from them in any way. Modification is allowed provided these
- ** notices remain with any altered or edited versions of the program.
- **
- ** The main planetary calculation routines used in this program have
- ** been Copyrighted and the core of this program is basically a
- ** conversion to C of the routines created by James Neely as listed in
- ** Michael Erlewine's 'Manual of Computer Programming for Astrologers',
- ** available from Matrix Software. The copyright gives us permission to
- ** use the routines for personal use but not to sell them or profit from
- ** them in any way.
- **
- ** The PostScript code within the core graphics routines are programmed
- ** and Copyright (C) 1992-1993 by Brian D. Willoughby
- ** (brianw@sounds.wa.com). Conditions are identical to those above.
- **
- ** The extended accurate ephemeris databases and formulas are from the
- ** calculation routines in the program "Placalc" and are programmed and
- ** Copyright (C) 1989,1991,1993 by Astrodienst AG and Alois Treindl
- ** (alois@azur.ch). The use of that source code is subject to
- ** regulations made by Astrodienst Zurich, and the code is not in the
- ** public domain. This copyright notice must not be changed or removed
- ** by any user of this program.
- **
- ** Initial programming 8/28,30, 9/10,13,16,20,23, 10/3,6,7, 11/7,10,21/1991.
- ** X Window graphics initially programmed 10/23-29/1991.
- ** PostScript graphics initially programmed 11/29-30/1992.
- ** Last code change made 1/29/1995.
- */
-
- #include "placalc.h"
-
-
- #ifdef PLACALC
- /*
- ** ---------------------------------------------------------------
- ** | Copyright Astrodienst AG and Alois Treindl, 1989,1991,1993 |
- ** | The use of this source code is subject to regulations made |
- ** | by Astrodienst Zurich. The code is NOT in the public domain.|
- ** | |
- ** | This copyright notice must not be changed or removed |
- ** | by any user of this program. |
- ** ---------------------------------------------------------------
- **
- ** Important changes:
- ** 11-jun-93 revision 1.12: fixed error which affected Mercury between -2100
- ** and -3100 (it jumped wildly).
- */
-
- /***********************************************************
- ** $Header$
- **
- ** definition module for planetary elements
- ** and disturbation coefficients
- ** version HP-UX C for new version with stored outer planets
- ** 31-jul-88
- ** by Alois Treindl
- **
- ** ---------------------------------------------------------------
- ** | Copyright Astrodienst Zurich AG and Alois Treindl, 1989. |
- ** | The use of this source code is subject to regulations made |
- ** | by Astrodienst Zurich. The code is NOT in the public domain.|
- ** | |
- ** | This copyright notice must not be changed or removed |
- ** | by any user of this program. |
- ** ---------------------------------------------------------------
- **
- ***********************************************************/
-
- /*
- ** In the elements degrees were kept as the units for the constants. This
- ** requires conversion to radians, when the actual calculations are performed.
- ** This approach is not the most efficient, but safer for development.
- ** Constant conversion could be done by writing all degree constants with
- ** value * DEGTORAD
- */
-
- #define TIDAL_26 TRUE /* decide wheter to use new or old lunar tidal
- term; a consistent system of delta t must be
- used */
- #define MOON_TEST_CORR FALSE /* to include more lunar terms in longitude */
-
- REAL8 ekld[4] = {23.452294, -46.845, -.0059, 0.00181};
- /* ecliptic with epoch1900, Ekd(0..3) in basic */
-
- struct eledata pd[MARS + 1] = {
-
- { /* earth */
-
- 1.00000023, 365.25636042, EPOCH1900,
- 99.696678, 0.9856473354, 1.089, 0,
- 101.220833, 6189.03, 1.63, 0.012,
- 0.01675104, -0.00004180, -0.000000126,
- 0, 0, 0, 0,
- 0, 0, 0
- },
-
- /*
- ** note 29 June 88 by Alois: G.M.Clemence, Astronomical Journal
- ** vol.53,p. 178 (1948) gives a correction to the perihel motion
- ** of -4.78" T, giving 6184.25 for the linear Term above. We have
- ** not yet applied this correction. It has been used in APAE 22,4
- ** on the motion of mars and does make an official impression.
- */
-
- { /* moon */
-
- 0.0025955307, 27.321661, EPOCH1900,
-
- #if ! TIDAL_26
- /*
- ** values from Improved Lunar Ephemeris, corresponding to tidal
- ** term -22.44"/cy and consistent with delta t ~ 29.949 T*T
- */
-
- 270.4341638, 13.176396526808121, -4.08, 0.0068,
- #endif
-
-
- #if TIDAL_26
- /*
- ** new values from Morrison 1979, with tidal term -26"/cy as
- ** stated in A.E. 1986 onwards, consistent with delta t ~ 44.3 T*T
- ** correction: -1.54" + 2.33" T - 1.78" T*T
- */
-
- 270.4337361, 13.176396544528099, -5.86, 0.0068,
- # endif
-
-
- 334.329556, 14648522.52, -37.17, -0.045,
- 0.054900489, 0, 0,
- 259.183275, -6962911.23, 7.48 , 0.008,
- 5.145388889, 0, 0
- },
-
- { /* mercury */
-
- 0.3870986, 87.969252, EPOCH1900,
- 178.179078, 4.0923770233, 1.084, 0,
- 75.89969722, 5599.76, 1.061, 0,
- 0.20561421, .00002046, -.000000030,
- 47.145944444, 4266.75, .626, 0,
- 7.0028805555, 6.699, -.066
- },
-
-
- { /* venus */
-
- 0.72333162, 224.700726, EPOCH1900,
- 342.767053, 1.6021687039, 1.1148, 0,
- 130.16383333, 5068.93, -3.515, 0,
- 0.00682069, -.00004774, .000000091,
- 75.7796472223,3239.46, 1.476, 0,
- 3.3936305555, 3.621, .0035
- },
-
-
- { /* mars */
-
- 1.5236914620, 686.9296097, EPOCH1900,
-
- /* These are the corrected elements by Ross */
-
- 293.74762778, .524071163814, 1.1184, 0,
- 334.21820278, 6626.73, .4675, -0.0043,
- 0.09331290, .000092064, -.000000077,
- 48.786441667, 2775.57, -.005, -0.0192,
- 1.85033333, -2.430, .0454
- }
- };
-
- /*
- ** mimimum and maximum distances computed over 1000 years with plamimax,
- ** required for relative distances rgeo, where the distance is given
- ** as 100 when a planet is closest and as 0 when farthest from earth.
- */
-
- REAL8 rmima[CALC_N][2] = {
- { 0.98296342, 1.01704665 },
- { 0.00238267, 0.00271861 },
- { 0.54900496, 1.45169607 },
- { 0.26411287, 1.73597885 },
- { 0.37289847, 2.67626927 },
- { 3.94877993, 6.45627627 },
- { 7.99362824, 11.09276636 },
- { 17.28622633, 21.10714104 },
- { 28.81374786, 31.33507284 },
- { 28.67716748, 50.29208774 },
- { 0.00, 0.00259553 }, /* nodes don't get a real value */
- { 0.00, 0.00259553 },
- { 7.36277475, 19.86585062 }
- };
-
-
- struct sdat _sd [SDNUM] = {
- { 114.50, 585.17493 },
- { 109.856, 191.39977 },
- { 148.031, 30.34583 },
- { 284.716, 12.21794 },
- { 114.508, 585.17656 },
- { -0.56, 359.99213 },
- { 148.03, 30.34743 },
- { 284.72, 12.2196 },
- { 248.07, 1494.726615 },
- { 359.44, 359.993595 },
- { 109.86, 191.402867 },
- { 148.02, 30.348930 },
- { 114.503, 585.173715 },
- { 359.444, 359.989285 },
- { 148.021, 30.344620 },
- { 284.716, 12.21669 },
- { 148.0315, 30.34906264 },
- { 284.7158, 12.22117085 },
- { 220.1695, 4.284931111 },
- { 291.8024, 2.184704167 }
- };
-
- REAL8 sa[SDNUM];
-
- /*
- ** delta long = lampl * COS (lphase - arg) in seconds of arc
- ** delta rad = rampl * COS (rphase - arg) in ninth place of log
- ** arg = j * sa (k) + i * ma (this planet)
- ** ma = mean anomaly
- ** sa = mean anomaly of disturbing planet, where this
- ** is taken from the aproximate value in sa[]
- ** For the COS (phase - arg) it is good enough to compute
- ** with 32 bit reals, because ampl and phase have only
- ** four to five significant digits.
- ** While saving constant space, it is costing execution time due
- ** to float/double conversions.
- **
- ** In basic, all correction terms for sun, mercury, venus and mars
- ** were contained in one array K(0..142,0..6); Nk(N,0) contained
- ** the index of the first term of planet N and Nk(N,1) the number
- ** of terms for this planet. Here, we use a 0 in the first column
- ** kor.j to indicate the end of the table for a planet.
- ** K(*) was a basic INTEGER array, therefore the amplitudes and phases
- ** had to be expressed as
- ** K(i,2) = ampl. of longitude in 0.001 seconds of arc
- ** K(i,3) = phase of longitude in 0.01 degrees
- ** K(i,4) = ampl. of radius in 9th place of log
- ** K(i,5) = phase of radius in 0.01 degrees.
- ** Here we have converted the amplitude of long. to seconds of arc
- ** and the phases to degrees.
- */
-
- struct kor ARR earthkor[] = { /* 11-jul-88 all terms to 0.020" longitude */
-
- /* j i lampl lphase rampl rphase k */
-
- { -1, 1, 0.013, 243, 28, 335, 8 }, /* mercury */
- { -1, 3, 0.015, 357, 18, 267, 8 },
- { -1, 4, 0.023, 326, 5, 239, 8 },
- { -1, 0, 0.075, 296.6, 94, 205.0, 0 }, /* venus */
- { -1, 1, 4.838, 299.10, 2359, 209.08, 0 },
- { -1, 2, 0.074, 207.9, 69, 348.5, 0 },
- { -1, 3, 0.009, 249, 16, 330, 0 },
- { -2, 1, 0.116, 148.90, 160, 58.40, 0 },
- { -2, 2, 5.526, 148.31, 6842, 58.32, 0 },
- { -2, 3, 2.497, 315.94, 869, 226.70, 0 },
- { -2, 4, 0.044, 311.4, 52, 38.8, 0 },
- { -3, 2, 0.013, 176, 21, 90, 0 },
- { -3, 3, 0.666, 177.71, 1045, 87.57, 0 },
- { -3, 4, 1.559, -14.75, 1497, 255.25, 0 },
- { -3, 5, 1.024, 318.15, 194, 49.50, 0 },
- { -3, 6, 0.017, 315, 19, 43, 0 },
- { -4, 4, 0.210, 206.20, 376, 116.28, 0 },
- { -4, 5, 0.144, 195.40, 196, 105.20, 0 },
- { -4, 6, 0.152, -16.20, 94, 254.80, 0 },
- { -5, 5, 0.084, 235.6, 163, 145.4, 0 },
- { -5, 6, 0.037, 221.8, 59, 132.2, 0 },
- { -5, 7, 0.123, 195.30, 141, 105.40, 0 },
- { -5, 8, 0.154, -.40, 26, 270.00, 0 },
- { -6, 6, 0.038, 264.1, 80, 174.3, 0 },
- { -6, 7, 0.014, 253, 25, 164, 0 },
- { -6, 8, 0.01, 230, 14, 135, 0 },
- { -6, 9, 0.014, 12, 12, 284, 0 },
- { -7, 7, 0.020, 294, 42, 203.5, 0 },
- { -7, 8, 0.006, 279, 12, 194, 0 },
- { -8, 8, 0.011, 322, 24, 234, 0 },
- { -8, 12, 0.042, 259.2, 44, 169.7, 0 },
- { -8, 14, 0.032, 48.8, 33, 138.7, 0 },
- { -9, 9, 0.006, 351, 13, 261, 0 },
- { 1, -1, 0.273, 217.70, 150, 127.70, 1 }, /* mars */
- { 1, 0, 0.048, 260.3, 28, 347, 1 },
- { 2, -3, 0.041, 346, 52, 255.4, 1 },
- { 2, -2, 2.043, 343.89, 2057, 253.83, 1 },
- { 2, -1, 1.770, 200.40, 151, 295.00, 1 },
- { 2, 0, 0.028, 148, 31, 234.3, 1 },
- { 3, -3, .129, 294.20, 168, 203.50, 1 },
- { 3, -2, .425, -21.12, 215, 249.00, 1 },
- { 4, -4, 0.034, 71, 49, 339.7, 1 },
- { 4, -3, .500, 105.18, 478, 15.17, 1 },
- { 4, -2, .585, -25.94, 105, 65.90, 1 },
- { 5, -4, 0.085, 54.6, 107, 324.6, 1 },
- { 5, -3, .204, 100.80, 89, 11.00, 1 },
- { 6, -5, 0.020, 186, 30, 95.7, 1 },
- { 6, -4, .154, 227.40, 139, 137.30, 1 },
- { 6, -3, .101, 96.30, 27, 188.00, 1 },
- { 7, -5, 0.049, 176.5, 60, 86.2, 1 },
- { 7, -4, .106, 222.70, 38, 132.90, 1 },
- { 8, -5, 0.052, 348.9, 45, 259.7, 1 },
- { 8, -4, 0.021, 215.2, 8, 310, 1 },
- { 8, -6, 0.010, 307, 15, 217, 1 },
- { 9, -6, 0.028, 298, 34, 208.1, 1 },
- { 9, -5, 0.062, 346, 17, 257, 1 },
- { 10, -6, 0.019, 111, 15, 23, 1 },
- { 11, -7, 0.017, 59, 20, 330, 1 },
- { 11, -6, 0.044, 105.9, 9, 21, 1 },
- { 13, -8, 0.013, 184, 15, 94, 1 },
- { 13, -7, 0.045, 227.8, 5, 143, 1 },
- { 15, -9, 0.021, 309, 22, 220, 1 },
- { 17, -9, 0.026, 113, 0, 0, 1 },
- { 1, -2, .163, 198.60, 208, 112.00, 2 }, /* jupiter */
- { 1, -1, 7.208, 179.53, 7067, 89.55, 2 },
- { 1, 0, 2.600, 263.22, 244, -21.40, 2 },
- { 1, 1, 0.073, 276.3, 80, 6.5, 2 },
- { 2, -3, 0.069, 80.8, 103, 350.5, 2 },
- { 2, -2, 2.731, 87.15, 4026, -2.89, 2 },
- { 2, -1, 1.610, 109.49, 1459, 19.47, 2 },
- { 2, 0, 0.073, 252.6, 8, 263, 2 },
- { 3, -3, .164, 170.50, 281, 81.20, 2 },
- { 3, -2, .556, 82.65, 803, -7.44, 2 },
- { 3, -1, .210, 98.50, 174, 8.60, 2 },
- { 4, -4, 0.016, 259, 29, 170, 2 },
- { 4, -3, 0.044, 168.2, 74, 79.9, 2 },
- { 4, -2, 0.080, 77.7, 113, 347.7, 2 },
- { 4, -1, 0.023, 93, 17, 3, 2 },
- { 5, -2, 0.009, 71, 14, 343, 2 },
- { 1, -2, 0.011, 105, 15, 11, 3 }, /* saturn */
- { 1, -1, .419, 100.58, 429, 10.60, 3 },
- { 1, 0, .320, 269.46, 8, -7.00, 3 },
- { 2, -2, .108, 290.60, 162, 200.60, 3 },
- { 2, -1, .112, 293.60, 112, 203.10, 3 },
- { 3, -2, 0.021, 289, 32, 200.1, 3 },
- { 3, -1, 0.017, 291, 17, 201, 3 },
-
- {ENDMARK}
- };
-
- struct kor ARR mercurykor[] = {
-
- /* j i lampl lphase rampl rphase k */
-
- { 1, -1, .711, 35.47, 491, 305.28, 4 },
- { 2, -3, .552, 161.15, 712, 71.12, 4 },
- { 2, -2, 2.100, 161.15, 2370, 71.19, 4 },
- { 2, -1, 3.724, 160.69, 899, 70.49, 4 },
- { 2, 0, .729, 159.76, 763, 250.00, 4 },
- { 3, -3, .431, 105.37, 541, 15.53, 4 },
- { 3, -2, 1.329, 104.78, 1157, 14.84, 4 },
- { 3, -1, .539, 278.95, 14, 282.00, 4 },
- { 4, -2, .484, 226.40, 234, 136.02, 4 },
- { 5, -4, .685, -10.43, 849, 259.51, 4 },
- { 5, -3, 2.810, -10.14, 2954, 259.92, 4 },
- { 5, -2, 7.356, -12.22, 282, 255.43, 4 },
- { 5, -1, 1.471, -12.30, 1550, 77.75, 4 },
- { 5, 0, .375, -12.29, 472, 77.70, 4 },
- { 2, -1, .443, 218.48, 256, 128.36, 5 },
- { 4, -2, .374, 151.81, 397, 61.63, 5 },
- { 4, -1, .808, 145.93, 13, 35.00, 5 },
- { 1, -1, .697, 181.07, 708, 91.38, 6 },
- { 1, 0, .574, 236.72, 75, 265.40, 6 },
- { 2, -2, .938, 36.98, 1185, 306.97, 6 },
- { 2, -1, 3.275, 37.00, 3268, 306.99, 6 },
- { 2, 0, .499, 31.91, 371, 126.90, 6 },
- { 3, -1, .353, 25.84, 347, 295.76, 6 },
- { 2, -1, .380, 239.87, 0, 0, 7 },
-
- {ENDMARK}
- };
-
- struct kor ARR venuskor[] = {
-
- /* j i lampl lphase rampl rphase k */
-
- { -1, 2, .264, -19.20, 175, 251.10, 8 },
- { -2, 5, .361, 167.68, 55, 77.20, 8 },
- { 1, -1, 4.889, 119.11, 2246, 29.11, 9 },
- { 2, -2, 11.261, 148.23, 9772, 58.21, 9 },
- { 3, -3, 7.128, -2.57, 8271, 267.42, 9 },
- { 3, -2, 3.446, 135.91, 737, 47.37, 9 },
- { 4, -4, 1.034, 26.54, 1426, 296.49, 9 },
- { 4, -3, .677, 165.32, 445, 75.70, 9 },
- { 5, -5, .330, 56.88, 510, -33.36, 9 },
- { 5, -4, 1.575, 193.93, 1572, 104.21, 9 },
- { 5, -3, 1.439, 138.08, 162, 229.90, 9 },
- { 6, -6, .143, 84.40, 236, -5.80, 9 },
- { 6, -5, .205, 44.20, 256, 314.20, 9 },
- { 6, -4, .176, 164.30, 70, 75.70, 9 },
- { 8, -5, .231, 180.00, 25, 75.00, 9 },
- { 3, -2, .673, 221.62, 717, 131.60, 10 },
- { 3, -1, 1.208, 237.57, 29, 149.00, 10 },
- { 1, -1, 2.966, 208.09, 2991, 118.09, 11 },
- { 1, 0, 1.563, 268.31, 91, -7.60, 11 },
- { 2, -2, .889, 145.16, 1335, 55.17, 11 },
- { 2, -1, .480, 171.01, 464, 80.95, 11 },
- { 3, -2, .169, 144.20, 250, 54.00, 11 },
-
- {ENDMARK}
- };
-
- struct kor ARR marskor[] = {
-
- /* j i lampl lphase rampl rphase k */
-
- { -1, 1, .115, 65.84, 684, 156.14, 12 },
- { -1, 2, .623, 246.03, 812, 155.77, 12 },
- { -1, 3, 6.368, 57.60, 556, -32.06, 12 },
- { -1, 4, .588, 57.24, 616, 147.28, 12 },
- { -2, 5, .138, 39.18, 157, 309.39, 12 },
- { -2, 6, .459, 217.58, 82, 128.10, 12 },
- { -1, -1, .106, 33.60, 141, 303.45, 13 },
- { -1, 0, .873, 34.34, 1112, 304.05, 13 },
- { -1, 1, 8.559, 35.10, 6947, 304.45, 13 },
- { -1, 2, 13.966, 20.50, 2875, 113.20, 13 },
- { -1, 3, 1.487, 22.18, 1619, 112.38, 13 },
- { -1, 4, .175, 22.46, 225, 112.15, 13 },
- { -2, 2, .150, 18.96, 484, 266.42, 13 },
- { -2, 3, 7.355, 158.64, 6412, 68.62, 13 },
- { -2, 4, 4.905, 154.09, 1985, 244.70, 13 },
- { -2, 5, .489, 154.39, 543, 244.50, 13 },
- { -3, 3, .216, 111.06, 389, 21.10, 13 },
- { -3, 4, .355, 110.64, 587, 19.17, 13 },
- { -3, 5, 2.641, 280.58, 2038, 190.60, 13 },
- { -3, 6, .970, 276.06, 587, 6.75, 13 },
- { -3, 7, .100, 276.20, 116, 6.40, 13 },
- { -4, 5, .152, 232.48, 259, 142.60, 13 },
- { -4, 6, .264, 230.47, 387, 139.75, 13 },
- { -4, 7, 1.156, 41.64, 749, 312.67, 13 },
- { -4, 8, .259, 37.92, 205, 128.80, 13 },
- { -5, 8, .172, -8.99, 234, 260.70, 13 },
- { -5, 9, .575, 164.48, 308, 74.60, 13 },
- { -6, 10, .115, 113.70, 145, 23.53, 13 },
- { -6, 11, .363, 285.69, 144, 196.00, 13 },
- { -7, 13, .353, 48.83, 85, 319.10, 13 },
- { -8, 15, 1.553, 170.14, 110, 81.00, 13 },
- { -8, 16, .148, 170.74, 154, 259.94, 13 },
- { -9, 17, .193, 293.70, 23, 22.80, 13 },
- { 1, -3, .382, 46.48, 521, 316.25, 14 },
- { 1, -2, 3.144, 46.78, 3894, 316.39, 14 },
- { 1, -1, 25.384, 48.96, 23116, 318.87, 14 },
- { 1, 0, 3.732, -17.62, 1525, 117.81, 14 },
- { 1, 1, .474, -34.60, 531, 59.67, 14 },
- { 2, -4, .265, 192.88, 396, 103.12, 14 },
- { 2, -3, 2.108, 192.72, 3042, 102.89, 14 },
- { 2, -2, 16.035, 191.90, 22144, 101.99, 14 },
- { 2, -1, 21.869, 188.35, 16624, 98.33, 14 },
- { 2, 0, 1.461, 189.66, 1478, 279.04, 14 },
- { 2, 1, .167, 191.04, 224, 280.81, 14 },
- { 3, -4, .206, 167.11, 338, 76.13, 14 },
- { 3, -3, 1.309, 168.27, 2141, 76.24, 14 },
- { 3, -2, 2.607, 228.41, 3437, 139.74, 14 },
- { 3, -1, 3.174, 207.20, 1915, 115.83, 14 },
- { 3, 0, .232, 207.78, 240, 298.06, 14 },
- { 4, -4, .178, 127.25, 322, 36.16, 14 },
- { 4, -3, .241, 200.69, 389, 110.02, 14 },
- { 4, -2, .330, 267.57, 413, 179.86, 14 },
- { 4, -1, .416, 221.88, 184, 128.17, 14 },
- { 1, -2, .155, -38.20, 191, 231.58, 15 },
- { 1, -1, 1.351, -34.10, 1345, 235.85, 15 },
- { 1, 0, .884, 288.05, 111, 39.90, 15 },
- { 1, 1, .132, 284.88, 144, 15.67, 15 },
- { 2, -2, .620, 35.15, 869, 305.30, 15 },
- { 2, -1, 1.768, 32.50, 1661, 302.51, 15 },
- { 2, 0, .125, 18.73, 103, 119.90, 15 },
- { 3, -2, .141, 47.59, 199, 318.06, 15 },
- { 3, -1, .281, 40.95, 248, 310.75, 15 },
-
- {ENDMARK}
- };
-
- struct m45dat m45[NUM_MOON_CORR] = {
-
- /* l l' F D, Long, Lat Par */
-
- { 0, 0, 0, 4, 13.902, 14.06, 0.2607 },
- { 0, 0, 0, 2, 2369.912, 2373.36, 28.2333 },
- { 1, 0, 0, 4, 1.979, 6.98, 0.0433 },
- { 1, 0, 0, 2, 191.953, 192.72, 3.0861 },
- { 1, 0, 0, 0, 22639.500, 22609.1, 186.5398 },
- { 1, 0, 0, -2, -4586.465, -4578.13, 34.3117 },
- { 1, 0, 0, -4, -38.428, -38.64, 0.6008 },
- { 1, 0, 0, -6, -0.393, -1.43, 0.0086 },
- { 0, 1, 0, 4, -0.289, -1.59, -0.0053 },
- { 0, 1, 0, 2, -24.420, -25.10, -0.3000 },
- { 0, 1, 0, 0, -668.146, -126.98, -0.3997 },
- { 0, 1, 0, -2, -165.145, -165.06, 1.9178 },
- { 0, 1, 0, -4, -1.877, -6.46, 0.0339 },
- { 0, 0, 0, 3, 0.403, -4.01, 0.0023 },
- { 0, 0, 0, 1, -125.154, -112.79, -0.9781 },
- { 2, 0, 0, 4, 0.213, 1.02, 0.0054 },
- { 2, 0, 0, 2, 14.387, 14.78, 0.2833 },
- { 2, 0, 0, 0, 769.016, 767.96, 10.1657 },
- { 2, 0, 0, -2, -211.656, -152.53, -0.3039 },
- { 2, 0, 0, -4, -30.773, -34.07, 0.3722 },
- { 2, 0, 0, -6, -0.570, -1.40, 0.0109 },
- { 1, 1, 0, 2, -2.921, -11.75, -0.0484 },
- { 1, 1, 0, 0, -109.673, -115.18, -0.9490 },
- { 1, 1, 0, -2, -205.962, -182.36, 1.4437 },
- { 1, 1, 0, -4, -4.391, -9.66, 0.0673 },
- { 1, -1, 0, 4, 0.283, 1.53, 0.0060 },
- { 1, -1, 0, 2, 14.577, 31.70, 0.2302 },
- { 1, -1, 0, 0, 147.687, 138.76, 1.1528 },
- { 1, -1, 0, -2, 28.475, 23.59, -0.2257 },
- { 1, -1, 0, -4, 0.636, 2.27, -0.0102 },
- { 0, 2, 0, 2, -0.189, -1.68, -0.0028 },
- { 0, 2, 0, 0, -7.486, -0.66, -0.0086 },
- { 0, 2, 0, -2, -8.096, -16.35, 0.0918 },
- { 0, 0, 2, 2, -5.741, -0.04, -0.0009 },
- { 0, 0, 2, 0, -411.608, -0.2, -0.0124 },
- { 0, 0, 2, -2, -55.173, -52.14, -0.1052 },
- { 0, 0, 2, -4, 0.025, -1.67, 0.0031 },
- { 1, 0, 0, 1, -8.466, -13.51, -0.1093 },
- { 1, 0, 0, -1, 18.609, 3.59, 0.0118 },
- { 1, 0, 0, -3, 3.215, 5.44, -0.0386 },
- { 0, 1, 0, 1, 18.023, 17.93, 0.1494 },
- { 0, 1, 0, -1, 0.560, 0.32, -0.0037 },
- { 3, 0, 0, 2, 1.060, 2.96, 0.0243 },
- { 3, 0, 0, 0, 36.124, 50.64, 0.6215 },
- { 3, 0, 0, -2, -13.193, -16.40, -0.1187 },
- { 3, 0, 0, -4, -1.187, -0.74, 0.0074 },
- { 3, 0, 0, -6, -0.293, -0.31, 0.0046 },
- { 2, 1, 0, 2, -0.290, -1.45, -0.0051 },
- { 2, 1, 0, 0, -7.649, -10.56, -0.1038 },
- { 2, 1, 0, -2, -8.627, -7.59, -0.0192 },
- { 2, 1, 0, -4, -2.740, -2.54, 0.0324 },
- { 2, -1, 0, 2, 1.181, 3.32, 0.0213 },
- { 2, -1, 0, 0, 9.703, 11.67, 0.1268 },
- { 2, -1, 0, -2, -2.494, -1.17, -0.0017 },
- { 2, -1, 0, -4, 0.360, 0.20, -0.0043 },
- { 1, 2, 0, 0, -1.167, -1.25, -0.0106 },
- { 1, 2, 0, -2, -7.412, -6.12, 0.0484 },
- { 1, 2, 0, -4, -0.311, -0.65, 0.0044 },
- { 1, -2, 0, 2, 0.757, 1.82, 0.0112 },
- { 1, -2, 0, 0, 2.580, 2.32, 0.0196 },
- { 1, -2, 0, -2, 2.533, 2.40, -0.0212 },
- { 0, 3, 0, -2, -0.344, -0.57, 0.0036 },
- { 1, 0, 2, 2, -0.992, -0.02, 0 },
- { 1, 0, 2, 0, -45.099, -0.02, -0.0010 },
- { 1, 0, 2, -2, -0.179, -9.52, -0.0833 },
- { 1, 0, -2, 2, -6.382, -3.37, -0.0481 },
- { 1, 0, -2, 0, 39.528, 85.13, -0.7136 },
- { 1, 0, -2, -2, 9.366, 0.71, -0.0112 },
- { 0, 1, 2, 0, 0.415, 0.10, 0.0013 },
- { 0, 1, 2, -2, -2.152, -2.26, -0.0066 },
- { 0, 1, -2, 2, -1.440, -1.30, 0.0014 },
- { 0, 1, -2, -2, 0.384, 0.0, 0.0 },
- { 2, 0, 0, 1, -0.586, -1.20, -0.0100 },
- { 2, 0, 0, -1, 1.750, 2.01, 0.0155 },
- { 2, 0, 0, -3, 1.225, 0.91, -0.0088 },
- { 1, 1, 0, 1, 1.267, 1.52, 0.0164 },
- { 1, -1, 0, -1, -1.089, 0.55, 0 },
- { 0, 0, 2, -1, 0.584, 8.84, 0.0071 },
- { 4, 0, 0, 0, 1.938, 3.60, 0.0401 },
- { 4, 0, 0, -2, -0.952, -1.58, -0.0130 },
- { 3, 1, 0, 0, -0.551, 0.94, -0.0097 },
- { 3, 1, 0, -2, -0.482, -0.57, -0.0045 },
- { 3, -1, 0, 0, 0.681, 0.96, 0.0115 },
- { 2, 0, 2, 0, -3.996, 0, 0.0004 },
- { 2, 0, 2, -2, 0.557, -0.75, -0.0090 },
- { 2, 0, -2, 2, -0.459, -0.38, -0.0053 },
- { 2, 0, -2, 0, -1.298, 0.74, 0.0004 },
- { 2, 0, -2, -2, 0.538, 1.14, -0.0141 },
- { 1, 1, -2, -2, 0.426, 0.07, -0.0006 },
- { 1, -1, 2, 0, -0.304, 0.03, 0.0003 },
- { 1, -1, -2, 2, -0.372, -0.19, -0.0027 },
- { 0, 0, 4, 0, 0.418, 0, 0 },
- { 2, -1, 0, -1, -0.352, -0.37, -0.0028 }
- };
-
- # if MOON_TEST_CORR
-
- /* moon additional correction terms */
-
- struct m5dat {
- REAL8 lng;
- int i0,i1,i2,i3;
- } m5[] = {
-
- /* lng l l' F D */
-
- { 0.127, 0, 0, 0, 6 },
- { -0.151, 0, 2, 0, -4 },
- { -0.085, 0, 0, 2, 4 },
- { 0.150, 0, 1, 0, 3 },
- { -0.091, 2, 1, 0, -6 },
- { -0.103, 0, 3, 0, 0 },
- { -0.301, 1, 0, 2, -4 },
- { 0.202, 1, 0, -2, -4 },
- { 0.137, 1, 1, 0, -1 },
- { 0.233, 1, 1, 0, -3 },
- { -0.122, 1, -1, 0, 1 },
- { -0.276, 1, -1, 0, -3 },
- { 0.255, 0, 0, 2, 1 },
- { 0.254, 0, 0, 2, -3 },
- { -0.100, 3, 1, 0, -4 },
- { -0.183, 3, -1, 0, -2 },
- { -0.297, 2, 2, 0, -2 },
- { -0.161, 2, 2, 0, -4 },
- { 0.197, 2, -2, 0, 0 },
- { 0.254, 2, -2, 0, -2 },
- { -0.250, 1, 3, 0, -2 },
- { -0.123, 2, 0, 2, 2 },
- { 0.173, 2, 0, -2, -4 },
- { 0.263, 1, 1, 2, 0 },
- { 0.130, 3, 0, 0, -1 },
- { 0.113, 5, 0, 0, 0 },
- { 0.092, 3, 0, 2, -2 },
- { 0.000, 99, 0, 0, 0 } /* end mark */
- };
- # endif /* MOON_TEST_CORR */
-
-
- /*****************************************************
- $Header: deltat.c,v 1.10 93/01/27 14:37:06 alois Exp $
- deltat.c
- deltat(t): returns delta t (in julian days) from universal time t
- is included by users
- ET = UT + deltat
-
- ---------------------------------------------------------------
- | Copyright Astrodienst Zurich AG and Alois Treindl, 1989. |
- | The use of this source code is subject to regulations made |
- | by Astrodienst Zurich. The code is NOT in the public domain.|
- | |
- | This copyright notice must not be changed or removed |
- | by any user of this program. |
- ---------------------------------------------------------------
-
- ******************************************************/
-
- double deltat(jd_ad)
- double jd_ad;
- {
- static short int ARR dt[] = { /* in centiseconds */
-
- /*
- ** dt from 1637 to 2000, as tabulated in A.E.
- ** the values 1620 - 1636 are not taken, as they fit
- ** badly the parabola 25.5 t*t for the next range. The
- ** best crossing point to switch to the parabola is
- ** 1637, where we have fitted the value for continuity
- */
- 6780, 6500, 6300,
- 6200, 6000, 5800, 5700, 5500,
- 5400, 5300, 5100, 5000, 4900,
- 4800, 4700, 4600, 4500, 4400,
- 4300, 4200, 4100, 4000, 3800, /* 1655 - 59 */
- 3700, 3600, 3500, 3400, 3300,
- 3200, 3100, 3000, 2800, 2700,
- 2600, 2500, 2400, 2300, 2200,
- 2100, 2000, 1900, 1800, 1700,
- 1600, 1500, 1400, 1400, 1300,
- 1200, 1200, 1100, 1100, 1000,
- 1000, 1000, 900, 900, 900,
- 900, 900, 900, 900, 900,
- 900, 900, 900, 900, 900, /* 1700 - 1704 */
- 900, 900, 900, 1000, 1000,
- 1000, 1000, 1000, 1000, 1000,
- 1000, 1000, 1100, 1100, 1100,
- 1100, 1100, 1100, 1100, 1100,
- 1100, 1100, 1100, 1100, 1100,
- 1100, 1100, 1100, 1100, 1200, /* 1730 - 1734 */
- 1200, 1200, 1200, 1200, 1200,
- 1200, 1200, 1200, 1200, 1300,
- 1300, 1300, 1300, 1300, 1300,
- 1300, 1400, 1400, 1400, 1400,
- 1400, 1400, 1400, 1500, 1500,
- 1500, 1500, 1500, 1500, 1500, /* 1760 - 1764 */
- 1600, 1600, 1600, 1600, 1600,
- 1600, 1600, 1600, 1600, 1600,
- 1700, 1700, 1700, 1700, 1700,
- 1700, 1700, 1700, 1700, 1700,
- 1700, 1700, 1700, 1700, 1700,
- 1700, 1700, 1600, 1600, 1600, /* 1790 - 1794 */
- 1600, 1500, 1500, 1400, 1400,
- 1370, 1340, 1310, 1290, 1270, /* 1800 - 1804 */
- 1260, 1250, 1250, 1250, 1250,
- 1250, 1250, 1250, 1250, 1250,
- 1250, 1250, 1240, 1230, 1220,
- 1200, 1170, 1140, 1110, 1060,
- 1020, 960, 910, 860, 800,
- 750, 700, 660, 630, 600, /* 1830 - 1834 */
- 580, 570, 560, 560, 560,
- 570, 580, 590, 610, 620,
- 630, 650, 660, 680, 690,
- 710, 720, 730, 740, 750,
- 760, 770, 770, 780, 780,
- 788, 782, 754, 697, 640, /* 1860 - 1864 */
- 602, 541, 410, 292, 182,
- 161, 10, -102, -128, -269,
- -324, -364, -454, -471, -511,
- -540, -542, -520, -546, -546,
- -579, -563, -564, -580, -566,
- -587, -601, -619, -664, -644, /* 1890 - 1894 */
- -647, -609, -576, -466, -374,
- -272, -154, -2, 124, 264,
- 386, 537, 614, 775, 913,
- 1046, 1153, 1336, 1465, 1601,
- 1720, 1824, 1906, 2025, 2095,
- 2116, 2225, 2241, 2303, 2349, /* 1920 - 1924 */
- 2362, 2386, 2449, 2434, 2408,
- 2402, 2400, 2387, 2395, 2386,
- 2393, 2373, 2392, 2396, 2402,
- 2433, 2483, 2530, 2570, 2624,
- 2677, 2728, 2778, 2825, 2871,
- 2915, 2957, 2997, 3036, 3072, /* 1950 - 1954 */
- 3107, 3135, 3168, 3218, 3268,
- 3315, 3359, 3400, 3447, 3503,
- 3573, 3654, 3743, 3829, 3920,
- 4018, 4117, 4223, 4337, 4449,
- 4548, 4646, 4752, 4853, 4959,
- 5054, 5138, 5217, 5296, 5379, /* 1980 - 1984 */
- 5434, 5487, 5532, 5582, 5630, /* 1985 - 89 from AE 1991 */
- 5686, 5757, 5900, 5900, 6000, /* AE 1993 and extrapol */
- 6050, 6100, 6150, 6200, 6250, /* 1995 - 1999 */
- 6300 /* 2000 */
- };
-
- double yr, cy, delta;
- long iyr, i;
- yr = (jd_ad + 18262) / 365.25 + 100.0; /* year relative 1800 */
- cy = yr / 100;
- iyr = (long) (RFloor(yr) + 1800); /* truncated to integer, rel 0 */
-
- #if TIDAL_26 /* Stephenson formula only when 26" tidal term in lunar motion */
-
- if (iyr >= 1637 && iyr < 2000)
- {
- i = iyr - 1637;
- delta = dt[i] * 0.01 + (dt[i+1] - dt[i]) * (yr - RFloor(yr)) * 0.01;
- }
-
- else if (iyr >= 2000) /* parabola, fitted at value[2000] */
- {
- delta = 25.5 * cy * cy - 25.5 * 4 + 63.00;
- }
-
- else if (iyr >= 948) /* from 948 - 1637 use parabola */
- {
- delta = 25.5 * cy * cy;
- }
-
- else /* before 984 use other parabola */
- {
- delta = 1361.7 + 320 * cy + 44.3 * cy * cy; /* fits at 948 */
- }
-
- #else /* use Clemence value + 5 sec before 1690, new dt afterwards */
-
- cy -= 1; /* epoch 1900 */
- if (iyr >= 1690 && iyr < 2000)
- {
- i = iyr - 1637;
- delta = dt[i] * 0.01 + (dt[i+1] - dt[i]) * (yr - RFloor(yr)) * 0.01;
- }
-
- else if (iyr >= 2000) /* parabola, fitted at value[2000] */
- {
- delta = 29.949 * cy * cy - 29.949 * 4 + 63.0;
- }
-
- else
- {
- delta = 5 + 24.349 + 72.3165 * cy + 29.949 * cy * cy; /* fits at 1690 */
- }
-
- #endif /* TIDAL_26 */
-
- return delta / 86400.0;
- }
-
-
- /*******************************************
- $Header: d2l.c,v 1.9 91/11/16 16:24:20 alois Exp $
-
- double to long with rounding, no overflow check
- *************************************/
-
- long d2l(x)
- double x;
- {
- if (x >=0)
- return ((long) (x + 0.5));
-
- else
- return (-(long) (0.5 - x));
- }
-
-
- /*
- * $Header$
- *
- * A collection of useful functions for centisec calculations.
-
- ---------------------------------------------------------------
- | Copyright Astrodienst Zurich AG and Alois Treindl, 1991. |
- | The use of this source code is subject to regulations made |
- | by Astrodienst Zurich. The code is NOT in the public domain.|
- | |
- | This copyright notice must not be changed or removed |
- | by any user of this program. |
- ---------------------------------------------------------------
- *******************************************************/
-
- double degnorm(p)
- double p;
- {
- if (p < 0) do {
- p += 360.0;
- } while (p < 0);
-
- else if (p >= 360.0) do {
- p -= 360.0;
- } while (p >= 360.0);
-
- return (p);
- }
-
-
- /*********************************************************
- $Header: julday.c,v 1.9 91/11/16 16:25:06 alois Exp $
- *********************************************************/
-
- /*
- ** This function returns the absolute Julian day number (JD)
- ** for a given calendar date.
- ** The aruguments are a calendar date: day, month, year as integers,
- ** hour as double with decimal fraction.
- ** If gregflag = 1, Gregorian calendar is assumed, gregflag = 0
- ** Julian calendar is assumed.
- **
- ** The Julian day number is system of numbering all days continously
- ** within the time range of known human history. It should be familiar
- ** for every astrological or astronomical programmer. The time variable
- ** in astronomical theories is usually expressed in Julian days or
- ** Julian centuries (36525 days per century) relative to some start day;
- ** the start day is called 'the epoch'.
- ** The Julian day number is a double representing the number of
- ** days since JD = 0.0 on 1 Jan -4712, 12:00 noon.
- ** Midnight has always a JD with fraction .5, because traditionally
- ** the astronomical day started at noon.
- **
- ** NOTE: The Julian day number is named after the monk Julianus. It must
- ** not be confused with the Julian calendar system, which is named after
- ** Julius Cesar, the Roman politician who introduced this calendar.
- **
- ** Original author: Marc Pottenger, Los Angeles.
- ** with bug fix for year < -4711 15-aug-88 by Alois Treindl
- **
- ** References: Oliver Montenbruck, Grundlagen der Ephemeridenrechnung,
- ** Verlag Sterne und Weltraum (1987), p.49 ff
- **
- ** related functions: revjul() reverse Julian day number: compute the
- ** calendar date from a given JD
- */
-
- double julday(month, day, year, hour, gregflag)
- int month;
- int day;
- int year;
- double hour;
- int gregflag;
- {
- double jd, u, u0, u1, u2;
-
- u = year;
-
- if (month < 3)
- u -=1;
-
- u0 = u + 4712.0;
- u1 = month + 1.0;
-
- if (u1 < 4)
- u1 += 12.0;
-
- jd = RFloor(u0*365.25)
- + RFloor(30.6*u1+0.000001)
- + day + hour/24.0 - 63.5;
-
- if (gregflag)
- {
- u2 = RFloor(ABS8(u) / 100) - RFloor(ABS8(u) / 400);
-
- if (u < 0.0)
- u2 = -u2;
-
- jd = jd - u2 + 2;
-
- if ((u < 0.0) && (u/100 == RFloor(u/100)) && (u/400 != RFloor(u/400)))
- jd -= 1;
- }
- return jd;
- }
-
-
- /*********************************************************
- $Header: revjul.c,v 1.9 91/11/16 16:25:37 alois Exp $
- *********************************************************/
-
- /*
- ** revjul() is the inverse function to julday(), see the description there.
- ** Arguments are julian day number, calendar flag (0=julian, 1=gregorian)
- ** return values are the calendar day, month, year and the hour of
- ** the day with decimal fraction (0 .. 23.999999).
- **
- ** Original author Mark Pottenger, Los Angeles.
- ** with bug fix for year < -4711 16-aug-88 Alois Treindl
- */
-
- void revjul(jd, gregflag, jmon, jday, jyear, jut)
- double jd;
- int gregflag;
- int *jmon;
- int *jday;
- int *jyear;
- double *jut;
- {
- double u0, u1, u2, u3, u4;
-
- u0 = jd + 32082.5;
- if (gregflag)
- {
- u1 = u0 + RFloor(u0/36525.0) - RFloor(u0/146100.0) - 38.0;
-
- if (jd >= 1830691.5) u1 +=1;
- u0 = u0 + RFloor(u1/36525.0) - RFloor(u1/146100.0) - 38.0;
- }
-
- u2 = RFloor(u0 + 123.0);
- u3 = RFloor((u2 - 122.2) / 365.25);
- u4 = RFloor((u2 - RFloor(365.25 * u3)) / 30.6001);
-
- *jmon = (int)(u4-1.0);
-
- if (*jmon > 12)
- *jmon -= 12;
-
- *jday = (int)(u2 - RFloor(365.25 * u3) - RFloor(30.6001 * u4));
- *jyear = (int)(u3 + RFloor((u4 - 2.0) / 12.0) - 4800);
- *jut = (jd - RFloor(jd + 0.5) + 0.5) * 24.0;
- }
- #endif /* PLACALC */
-
- /* placalc2.c */
-